#include <iostream>
#include "Listas.h"

void cls();
void pause();
void sair();

void carregarArquivos(Listas &listas);

int main(){
    Listas listas;
    int opcao, opcao2, opcao3, opcao4, opcao5;
    
    while(true){
        
        cls();
        switch(listas.menuPrincipal()){
            
            case 1:
                int opcao;
                do{
                    cls();
                    switch((opcao = listas.menuSecaoClientes())){
                        case 1:
                            opcao2 = listas.menuBuscarCliente();
                            
                            if(opcao2 == 1 && listas.menuBuscarClienteCPF()){
                                do{
                                    cls();
                                    switch((opcao3 = listas.menuClienteSelecionado())){
                                        case 1: listas.menuEditarCliente();break;
                                        case 2: listas.excluirCliente();break;
                                        case 3: 
                                            do{
                                                cls();
                                                opcao4 = listas.menuSecaoPacientes();
                                                
                                                if(opcao4 == 1 && listas.menuBuscarPacientes()){
                                                    do{
                                                        cls();
                                                        switch((opcao5 = listas.menuPacienteSelecionado())){
                                                            case 1: listas.menuEditarPaciente();break;
                                                            case 2: listas.excluirPaciente();
                                                            case 3: listas.exibirCarteiraPaciente();
                                                            case 4: listas.exibirAgendaPaciente();
                                                            case 6: sair();
                                                        }
                                                        cls();
                                                    }while(opcao4 != 2 && opcao5 != 5);
                                                }
                                                else if(opcao4 == 2 && listas.menuExibirTodosPacientes()){
                                                    do{
                                                        cls();
                                                        switch((opcao5 = listas.menuPacienteSelecionado())){
                                                            case 1: listas.menuEditarPaciente();break;
                                                            case 2: listas.excluirPaciente();
                                                            case 3: listas.exibirCarteiraPaciente();
                                                            case 4: listas.exibirAgendaPaciente();
                                                            case 6: sair();
                                                        }
                                                        cls();
                                                    }while(opcao4 != 2 && opcao5 != 5);
                                                }
                                                else if (opcao4 == 3) listas.menuAdicionarPaciente();
                                                else if (opcao4 == 5) sair();                                                
                                            }while(opcao4 != 4);
                                            break;
                                        case 4: listas.menuSecaoPacotes();break;
                                        case 6: sair();
                                    }
                                }while(opcao3 != 2 && opcao3 != 5);
                            }
                            else if (opcao2 == 2 && listas.menuExibirTodosClientes()){
                                do{
                                    cls();
                                    switch((opcao3 = listas.menuClienteSelecionado())){
                                        case 1: listas.menuEditarCliente();break;
                                        case 2: listas.excluirCliente();break;
                                        case 3: 
                                            do{
                                                cls();
                                                opcao4 = listas.menuSecaoPacientes();
                                                
                                                if(opcao4 == 1 && listas.menuBuscarPacientes() || opcao4 == 2 && listas.menuExibirTodosPacientes()){
                                                    do{
                                                        cls();
                                                        switch((opcao5 = listas.menuPacienteSelecionado())){
                                                            case 1: listas.menuEditarPaciente();break;
                                                            case 2: listas.excluirPaciente();
                                                            case 3: listas.exibirCarteiraPaciente();
                                                            case 4: listas.exibirAgendaPaciente();
                                                            case 6: sair();
                                                        }
                                                        cls();
                                                    }while(opcao4 != 2 && opcao5 != 5);
                                                }
                                                else if (opcao4 == 3) listas.menuAdicionarPaciente();
                                                else if (opcao4 == 5) sair();                                                
                                            }while(opcao4 != 4);
                                            break;
                                        case 4: listas.menuSecaoPacotes();break;
                                        case 6: sair();
                                    }
                                }while(opcao3 != 2 && opcao3 != 5);
                            }                            
                            break;
                        case 2: 
                            if(listas.menuExibirTodosClientes()){
                                do{
                                    cls();
                                    switch((opcao3 = listas.menuClienteSelecionado())){
                                        case 1: listas.menuEditarCliente();break;
                                        case 2: listas.excluirCliente();break;
                                        case 3: 
                                            do{
                                                cls();
                                                opcao4 = listas.menuSecaoPacientes();
                                                
                                                if(opcao4 == 1 && listas.menuBuscarPacientes() || opcao4 == 2 && listas.menuExibirTodosPacientes()){
                                                    do{
                                                        cls();
                                                        switch((opcao5 = listas.menuPacienteSelecionado())){
                                                            case 1: listas.menuEditarPaciente();break;
                                                            case 2: listas.excluirPaciente();
                                                            case 3: listas.exibirCarteiraPaciente();
                                                            case 4: listas.exibirAgendaPaciente();
                                                            case 6: sair();
                                                        }
                                                        cls();
                                                    }while(opcao4 != 2 && opcao5 != 5);
                                                }
                                                else if (opcao4 == 3) listas.menuAdicionarPaciente();
                                                else if (opcao4 == 5) sair();                                                
                                            }while(opcao4 != 4);
                                            break;
                                        case 4: listas.menuSecaoPacotes();break;
                                        case 6: sair();
                                    }
                                }while(opcao3 != 2 && opcao3 != 5);
                            
                            }
                            break;
                        case 3: listas.menuInserirNovoCliente();break;
                        case 4: break;
                        case 5: sair();
                    }
                }while(opcao != 4);
                    break;
                    
            case 2: listas.menuSecaoVacinasDoencas();break;
            case 3: sair();
        }
    }
    return 0;
}


void cls(){    
    #ifdef WIN32
        system("cls");
    #elif defined __unix__
        system("clear");
        //cout << "\e[H\e[2J";
    #endif
}

void pause(){
    getchar();
}

void sair(){
    char opc;
    
    cout << endl << "\tDeseja mesmo sair do programa (s/n)?: ";
    cin >> opc;
    
    if(opc == 's' || opc == 'S'){
        //Gravar arquivos.
        exit(0);
    }
}

void carregarArquivos(Listas &listas){
    ofstream gravar("listas.dat");
    gravar << listas;
    gravar.close();
}
